Skip to Content.
Sympa Menu

svadev - [svadev] add metadata information for global and stack variables

svadev AT lists.siebelschool.illinois.edu

Subject: Svadev mailing list

List archive

[svadev] add metadata information for global and stack variables


Chronological Thread 
  • From: Baozeng <sploving1 AT gmail.com>
  • To: mentor <criswell AT illinois.edu>
  • Cc: svadev AT cs.illinois.edu
  • Subject: [svadev] add metadata information for global and stack variables
  • Date: Wed, 30 May 2012 22:03:47 +0800
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/svadev>
  • List-id: <svadev.cs.uiuc.edu>

Dear John,
I added metadata information for global and stack variables(commit
r157609 and commit r157670). Then I first test global variable with
the following test:

#include <stdlib.h>

int p[33];
int main() {
p[35] = 8;
return 0;
}
Then
#clang -fmemsafety -bbc globaltest.c -o test
-L/home/sploving/llvm/projects/safecode/Debug/lib
It shows the following error:
/tmp/globaltest-GkBpxH.o:globaltest.c:function sourcefile: error:
undefined reference to 'baggy.metadata1'

Its IR file is as the following(clang -g -fmemsafety -bbc globaltest.c
-o test_me.bc -c -emit-llvm
):

; ModuleID = '<stdin>'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128"
target triple = "i386-pc-linux-gnu"

@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32,
void ()* } { i32 0, void ()* @pool_ctor }]
@baggy.metadata = common global { i32, i32* }
@p = common global { [33 x i32], [116 x i8], { i32, i32* } } { [33 x
i32] zeroinitializer, [116 x i8] zeroinitializer, { i32, i32* }*
@baggy.metadata }, align 256
@baggy.metadata1 = internal constant { i32, i32* }
@sourcefile = internal constant { [28 x i8], [28 x i8], { i32, i32* }
} { [28 x i8] c"/home/sploving/globaltest.c\00", [28 x i8]
zeroinitializer, { i32, i32* }* @baggy.metadata1 }, align 64

define i32 @main() nounwind {
call void @fastlscheck_debug(i8* bitcast ({ [33 x i32], [116 x i8],
{ i32, i32* } }* @p to i8*), i8* bitcast (i32* getelementptr inbounds
([33 x i32]* getelementptr inbounds ({ [33 x i32], [116 x i8], { i32,
i32* } }* @p, i32 0, i32 0), i64 1, i32 2) to i8*), i32 132, i32 4,
i32 0, i8* getelementptr inbounds ({ [28 x i8], [28 x i8], { i32, i32*
} }* @sourcefile, i32 0, i32 0, i32 0), i32 5)
store i32 8, i32* getelementptr inbounds ([33 x i32]* getelementptr
inbounds ({ [33 x i32], [116 x i8], { i32, i32* } }* @p, i32 0, i32
0), i64 1, i32 2), align 4, !dbg !18
ret i32 0, !dbg !20
}

declare void @funccheckui(i8*, i8*)

declare i8* @poolcheckstrui(i8*, i8*)

declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind

declare void @pool_register_global(i8*, i8*, i32)

define internal void @sc.register_globals() nounwind {
entry:
call void @pool_register_global(i8* null, i8* bitcast ({ [33 x i32],
[116 x i8], { i32, i32* } }* @p to i8*), i32 132)
ret void
}

declare void @pool_register(i8*, i8*, i32)

declare void @poolcheck_freeui(i8*, i8*)

declare i32 @nullstrlen(i8*)

declare void @pool_reregister(i8*, i8*, i8*, i32)

declare void @pool_unregister(i8*, i8*)

declare void @pool_register_stack(i8*, i8*, i32)

declare void @pool_unregister_stack(i8*, i8*)

define internal void @pool_ctor() nounwind {
entry:
call void @pool_init_runtime(i32 0, i32 1, i32 0)
call void @sc.register_globals()
ret void
}

declare void @pool_init_runtime(i32, i32, i32)

declare i8* @poolcheckstrui_debug(i8*, i8*, i32, i8*, i32)

declare void @poolcheck_freeui_debug(i8*, i8*, i32, i8*, i32)

declare void @funccheckui_debug(i8*, i8*, i32, i8*, i32)

declare void @pool_register_debug(i8*, i8*, i32, i32, i8*, i32)

declare void @pool_register_stack_debug(i8*, i8*, i32, i32, i8*, i32)

declare void @pool_unregister_debug(i8*, i8*, i32, i8*, i32)

declare void @pool_unregister_stack_debug(i8*, i8*, i32, i8*, i32)

declare void @pool_reregister_debug(i8*, i8*, i8*, i32, i32, i8*, i32)

declare void @poolcheckui(i8*, i8*, i32)

declare i8* @boundscheckui(i8*, i8*, i8*)

declare i8* @exactcheck2(i8*, i8*, i32)

declare void @fastlscheck(i8*, i8*, i32, i32)

declare void @poolcheckui_debug(i8*, i8*, i32, i32, i8*, i32)

declare i8* @boundscheckui_debug(i8*, i8*, i8*, i32, i8*, i32)

declare i8* @exactcheck2_debug(i8*, i8*, i32, i32, i8*, i32)

declare void @fastlscheck_debug(i8*, i8*, i32, i32, i32, i8*, i32)

!llvm.dbg.cu = !{!0}

!0 = metadata !{i32 720913, i32 0, i32 12, metadata !"globaltest.c",
metadata !"/home/sploving", metadata !"clang version 3.0
(https://llvm.org/svn/llvm-project/safecode/trunk/tools/clang
157667)", i1 true, i1 false, metadata !"", i32 0, metadata !1,
metadata !1, metadata !3, metadata !12} ; [ DW_TAG_compile_unit ]
!1 = metadata !{metadata !2}
!2 = metadata !{i32 0}
!3 = metadata !{metadata !4}
!4 = metadata !{metadata !5}
!5 = metadata !{i32 720942, i32 0, metadata !6, metadata !"main",
metadata !"main", metadata !"", metadata !6, i32 4, metadata !7, i1
false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, i32 ()* @main,
null, null, metadata !10} ; [ DW_TAG_subprogram ]
!6 = metadata !{i32 720937, metadata !"globaltest.c", metadata
!"/home/sploving", null} ; [ DW_TAG_file_type ]
!7 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0,
i64 0, i32 0, i32 0, i32 0, metadata !8, i32 0, i32 0} ; [
DW_TAG_subroutine_type ]
!8 = metadata !{metadata !9}
!9 = metadata !{i32 720932, null, metadata !"int", null, i32 0, i64
32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
!10 = metadata !{metadata !11}
!11 = metadata !{i32 720932} ; [ DW_TAG_base_type ]
!12 = metadata !{metadata !13}
!13 = metadata !{metadata !14}
!14 = metadata !{i32 720948, i32 0, null, metadata !"p", metadata
!"p", metadata !"", metadata !6, i32 3, metadata !15, i32 0, i32 1,
[33 x i32]* getelementptr inbounds ({ [33 x i32], [116 x i8], { i32,
i32* } }* @p, i32 0, i32 0)} ; [ DW_TAG_variable ]
!15 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64
1056, i64 32, i32 0, i32 0, metadata !9, metadata !16, i32 0, i32 0} ;
[ DW_TAG_array_type ]
!16 = metadata !{metadata !17}
!17 = metadata !{i32 720929, i64 0, i64 32} ; [ DW_TAG_subrange_type ]
!18 = metadata !{i32 5, i32 3, metadata !19, null}
!19 = metadata !{i32 720907, metadata !5, i32 4, i32 12, metadata !6,
i32 0} ; [ DW_TAG_lexical_block ]
!20 = metadata !{i32 6, i32 3, metadata !19, null}

What is the matter with my commit?

Another thing, are there any classic examples to test whether BBC
support global and stack variables checking?

--
     Best Regards,
                                                                 Baozeng Ding
                                                                
OSTG,NFS,ISCAS





Archive powered by MHonArc 2.6.16.

Top of Page