@@ -2032,6 +2032,23 @@ pub fn update_linkage(ccx: &CrateContext,
2032
2032
}
2033
2033
}
2034
2034
2035
+ fn set_global_section ( ccx : & CrateContext , llval : ValueRef , i : & ast:: Item ) {
2036
+ match attr:: first_attr_value_str_by_name ( & i. attrs ,
2037
+ "link_section" ) {
2038
+ Some ( sect) => {
2039
+ if contains_null ( & sect) {
2040
+ ccx. sess ( ) . fatal ( & format ! ( "Illegal null byte in link_section value: `{}`" ,
2041
+ & sect) ) ;
2042
+ }
2043
+ unsafe {
2044
+ let buf = CString :: new ( sect. as_bytes ( ) ) . unwrap ( ) ;
2045
+ llvm:: LLVMSetSection ( llval, buf. as_ptr ( ) ) ;
2046
+ }
2047
+ } ,
2048
+ None => ( )
2049
+ }
2050
+ }
2051
+
2035
2052
pub fn trans_item ( ccx : & CrateContext , item : & ast:: Item ) {
2036
2053
let _icx = push_ctxt ( "trans_item" ) ;
2037
2054
@@ -2054,6 +2071,7 @@ pub fn trans_item(ccx: &CrateContext, item: &ast::Item) {
2054
2071
} else {
2055
2072
trans_fn ( ccx, & * * decl, & * * body, llfn, empty_substs, item. id , & item. attrs ) ;
2056
2073
}
2074
+ set_global_section ( ccx, llfn, item) ;
2057
2075
update_linkage ( ccx, llfn, Some ( item. id ) ,
2058
2076
if is_origin { OriginalTranslation } else { InlinedCopy } ) ;
2059
2077
@@ -2103,6 +2121,7 @@ pub fn trans_item(ccx: &CrateContext, item: &ast::Item) {
2103
2121
v. visit_expr ( & * * expr) ;
2104
2122
2105
2123
let g = consts:: trans_static ( ccx, m, expr, item. id , & item. attrs ) ;
2124
+ set_global_section ( ccx, g, item) ;
2106
2125
update_linkage ( ccx, g, Some ( item. id ) , OriginalTranslation ) ;
2107
2126
} ,
2108
2127
ast:: ItemForeignMod ( ref foreign_mod) => {
@@ -2387,21 +2406,6 @@ pub fn get_item_val(ccx: &CrateContext, id: ast::NodeId) -> ValueRef {
2387
2406
_ => ccx. sess ( ) . bug ( "get_item_val: weird result in table" )
2388
2407
} ;
2389
2408
2390
- match attr:: first_attr_value_str_by_name ( & i. attrs ,
2391
- "link_section" ) {
2392
- Some ( sect) => {
2393
- if contains_null ( & sect) {
2394
- ccx. sess ( ) . fatal ( & format ! ( "Illegal null byte in link_section value: `{}`" ,
2395
- & sect) ) ;
2396
- }
2397
- unsafe {
2398
- let buf = CString :: new ( sect. as_bytes ( ) ) . unwrap ( ) ;
2399
- llvm:: LLVMSetSection ( v, buf. as_ptr ( ) ) ;
2400
- }
2401
- } ,
2402
- None => ( )
2403
- }
2404
-
2405
2409
v
2406
2410
}
2407
2411
0 commit comments