History

OpenBSD: arm support (WIP)

herman ten brugge committed 5 years ago

Commit 23989cb1 parent d5c78ce3 files · +22 −2Browse files

Unified · Split

3 files
  1. arm-link.c +18 −0
  2. lib/bcheck.c +2 −2
  3. tccelf.c +2 −0
arm-link.c+18−0
@@ -46,6 +46,8 @@ int code_reloc (int reloc_type) · 45 unmodified lines
4646 case R_ARM_GLOB_DAT:
4747 case R_ARM_NONE:
4848 case R_ARM_TARGET1:
49+ case R_ARM_MOVT_PREL:
50+ case R_ARM_MOVW_PREL_NC:
4951 return 0;
5052
5153 case R_ARM_PC24:
@@ -89,6 +91,8 @@ int gotplt_entry_type (int reloc_type) · 37 unmodified lines
8991 case R_ARM_REL32:
9092 case R_ARM_V4BX:
9193 case R_ARM_TARGET1:
94+ case R_ARM_MOVT_PREL:
95+ case R_ARM_MOVW_PREL_NC:
9296 return AUTO_GOTPLT_ENTRY;
9397
9498 case R_ARM_GOTPC:
@@ -332,6 +336,20 @@ void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, addr_t · 237 unmodified lines
332336 *(int *)ptr += x;
333337 }
334338 return;
339+ case R_ARM_MOVT_PREL:
340+ case R_ARM_MOVW_PREL_NC:
341+ {
342+ int insn = *(int *)ptr;
343+ int addend = ((insn >> 4) & 0xf000) | (insn & 0xfff);
344+
345+ addend = (addend ^ 0x8000) - 0x8000;
346+ val += addend - addr;
347+ if (type == R_ARM_MOVT_PREL)
348+ val >>= 16;
349+ *(int *)ptr = (insn & 0xfff0f000) |
350+ ((val & 0xf000) << 4) | (val & 0xfff);
351+ }
352+ return;
335353 case R_ARM_THM_MOVT_ABS:
336354 case R_ARM_THM_MOVW_ABS_NC:
337355 {
lib/bcheck.c+2−2
@@ -289,7 +289,7 @@ DLL_EXPORT char *__bound_strcat(char *dest, const char *src); · 288 unmodified lines
289289 DLL_EXPORT char *__bound_strchr(const char *string, int ch);
290290 DLL_EXPORT char *__bound_strdup(const char *s);
291291
292−#if defined(__arm__)
292+#if defined(__arm__) && defined(TCC_ARM_EABI)
293293 DLL_EXPORT void *__bound___aeabi_memcpy(void *dst, const void *src, size_t size);
294294 DLL_EXPORT void *__bound___aeabi_memmove(void *dst, const void *src, size_t size);
295295 DLL_EXPORT void *__bound___aeabi_memmove4(void *dst, const void *src, size_t size);
@@ -1738,7 +1738,7 @@ void *__bound_memset(void *s, int c, size_t n) · 1442 unmodified lines
17381738 return memset(s, c, n);
17391739 }
17401740
1741−#if defined(__arm__)
1741+#if defined(__arm__) && defined(TCC_ARM_EABI)
17421742 void *__bound___aeabi_memcpy(void *dest, const void *src, size_t n)
17431743 {
17441744 dprintf(stderr, "%s, %s(): %p, %p, 0x%lx\n",
tccelf.c+2−0
@@ -1387,6 +1387,8 @@ ST_FUNC void tcc_add_btstub(TCCState *s1) · 1386 unmodified lines
13871387 CString cstr;
13881388
13891389 s = data_section;
1390+ /* Align to PTR_SIZE */
1391+ section_ptr_add(s, -s->data_offset & (PTR_SIZE - 1));
13901392 o = s->data_offset;
13911393 /* create (part of) a struct rt_context (see tccrun.c) */
13921394 put_ptr(s1, stab_section, 0);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t