@@ -1091,9 +1091,9 @@ void MachObj_term(const(char)[] objfilename)
1091
1091
fobjbuf.write(&rel, rel.sizeof);
1092
1092
foffset += rel.sizeof;
1093
1093
nreloc++ ;
1094
- int32_t * p = patchAddr64(seg, r.offset);
1094
+ // int32_t* p = patchAddr64(seg, r.offset);
1095
1095
// Absolute address; add in addr of start of targ seg
1096
- * p += SecHdrTab64[SegData[s.Sseg].SDshtidx].addr + s.Soffset;
1096
+ // *p += SecHdrTab64[SegData[s.Sseg].SDshtidx].addr + s.Soffset;
1097
1097
// patch(pseg, r.offset, s.Sseg, s.Soffset);
1098
1098
}
1099
1099
else if (s.Sclass == SC .extern_ ||
@@ -1994,14 +1994,18 @@ seg_data* MachObj_tlsseg()
1994
1994
1995
1995
/* ******************************************
1996
1996
* Emit 24 byte __thread_vars section for AArch64.
1997
+ * Params:
1998
+ * s = Symbol for variable to be added to __thread_vars section
1999
+ * offset = set to offset to start of where to write initializer data
2000
+ * bss = true to write to __thread_bss, false to __thread_data
1997
2001
* Returns:
1998
2002
* segment to write initialization data to
1999
2003
*/
2000
2004
@trusted
2001
- int MachObj_thread_vars (ref Symbol s, out targ_size_t offset)
2005
+ int MachObj_thread_vars (ref Symbol s, out targ_size_t offset, bool bss )
2002
2006
{
2003
- printf(" MachObj_thread_vars(s)\n " );
2004
- symbol_print(s);
2007
+ // printf("MachObj_thread_vars(s)\n");
2008
+ // symbol_print(s);
2005
2009
/* create _ident$tlv$init Symbol si
2006
2010
*/
2007
2011
Symbol* si;
@@ -2020,12 +2024,21 @@ int MachObj_thread_vars(ref Symbol s, out targ_size_t offset)
2020
2024
mem_free(dest.ptr);
2021
2025
}
2022
2026
2023
- /* write _ident$tlv$init to __thread_data section
2027
+ /* write _ident$tlv$init to __thread_bss / __thread_data section
2024
2028
*/
2025
- MachObj_tlsseg_data();
2026
- si.Sseg = seg_tlsseg_data;
2029
+ if (bss)
2030
+ {
2031
+ MachObj_tlsseg_bss();
2032
+ si.Sseg = seg_tlsseg_bss;
2033
+ offset = 0 ;
2034
+ }
2035
+ else
2036
+ {
2037
+ MachObj_tlsseg_data();
2038
+ si.Sseg = seg_tlsseg_data;
2039
+ offset = SegData[si.Sseg].SDbuf.length();
2040
+ }
2027
2041
si.Sfl = FL .tlsdata;
2028
- offset = SegData[si.Sseg].SDbuf.length();
2029
2042
MachObj_pubdef(si.Sseg, si, offset);
2030
2043
2031
2044
/* Create __thread_vars section, and s will refer to it
0 commit comments