@@ -2032,6 +2032,23 @@ pub fn update_linkage(ccx: &CrateContext,
20322032 }
20332033}
20342034
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+
20352052pub fn trans_item ( ccx : & CrateContext , item : & ast:: Item ) {
20362053 let _icx = push_ctxt ( "trans_item" ) ;
20372054
@@ -2054,6 +2071,7 @@ pub fn trans_item(ccx: &CrateContext, item: &ast::Item) {
20542071 } else {
20552072 trans_fn ( ccx, & * * decl, & * * body, llfn, empty_substs, item. id , & item. attrs ) ;
20562073 }
2074+ set_global_section ( ccx, llfn, item) ;
20572075 update_linkage ( ccx, llfn, Some ( item. id ) ,
20582076 if is_origin { OriginalTranslation } else { InlinedCopy } ) ;
20592077
@@ -2103,6 +2121,7 @@ pub fn trans_item(ccx: &CrateContext, item: &ast::Item) {
21032121 v. visit_expr ( & * * expr) ;
21042122
21052123 let g = consts:: trans_static ( ccx, m, expr, item. id , & item. attrs ) ;
2124+ set_global_section ( ccx, g, item) ;
21062125 update_linkage ( ccx, g, Some ( item. id ) , OriginalTranslation ) ;
21072126 } ,
21082127 ast:: ItemForeignMod ( ref foreign_mod) => {
@@ -2387,21 +2406,6 @@ pub fn get_item_val(ccx: &CrateContext, id: ast::NodeId) -> ValueRef {
23872406 _ => ccx. sess ( ) . bug ( "get_item_val: weird result in table" )
23882407 } ;
23892408
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-
24052409 v
24062410 }
24072411
0 commit comments