aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--stdlib/tst-bsearch.c55
-rw-r--r--sysdeps/mips/dl-machine.h8
-rw-r--r--sysdeps/unix/sysv/linux/mips/fcntl.c1
-rw-r--r--sysdeps/unix/sysv/linux/mips/syscalls.list1
5 files changed, 69 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index e427417..1a073c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2000-09-07 Andreas Jaeger <aj@suse.de>
+ * sysdeps/unix/sysv/linux/mips/syscalls.list: Add __syscall_fcntl.
+
+ * sysdeps/mips/dl-machine.h (RESOLVE_GOTSYM): Fix calls to
+ dl_lookup.
+ (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise.
+
+ * sysdeps/unix/sysv/linux/mips/fcntl.c: New file.
+
+ * stdlib/tst-bsearch.c (main): Add more test cases.
+
* locale/programs/ld-collate.c (handle_ellipsis): Fix typo.
* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
Reported by GOTO Masanori <gotom@debian.or.jp>.
diff --git a/stdlib/tst-bsearch.c b/stdlib/tst-bsearch.c
index 2d067c3..0f3db24 100644
--- a/stdlib/tst-bsearch.c
+++ b/stdlib/tst-bsearch.c
@@ -56,11 +56,11 @@ main (void)
{
int cnt;
int result = 0;
+ struct entry key;
+ struct entry *res;
for (cnt = 0; cnt < narr; ++cnt)
{
- struct entry key;
- struct entry *res;
key.val = arr[cnt].val;
@@ -77,6 +77,57 @@ main (void)
}
}
+ /* And some special tests that shouldn't find any entry. */
+ key.val = -1;
+ res = (struct entry *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct entry *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct entry *) bsearch (&key, arr, 0, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ /* Now the array contains only one element - no entry should be found. */
+ for (cnt = 0; cnt < narr; ++cnt)
+ {
+ key.val = arr[cnt].val;
+
+ res = (struct entry *) bsearch (&key, &arr[5], 1, sizeof (arr[0]), comp);
+ if (cnt == 5)
+ {
+ if (res == NULL)
+ {
+ printf ("entry %d not found\n", cnt);
+ result = 1;
+ }
+ else if (res != &arr[cnt])
+ {
+ puts ("wrong entry returned");
+ result = 1;
+ }
+ }
+ else if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+ }
+
if (result == 0)
puts ("all OK");
diff --git a/sysdeps/mips/dl-machine.h b/sysdeps/mips/dl-machine.h
index d1ac5cc..0d2bf9d 100644
--- a/sysdeps/mips/dl-machine.h
+++ b/sysdeps/mips/dl-machine.h
@@ -262,14 +262,14 @@ __dl_runtime_resolve (ElfW(Word) sym_index, \
{ \
value = _dl_lookup_versioned_symbol(strtab + sym->st_name, l, \
&sym, l->l_scope, version,\
- R_MIPS_REL32); \
+ R_MIPS_REL32, 0); \
break; \
} \
/* Fall through. */ \
} \
case 0: \
value = _dl_lookup_symbol (strtab + sym->st_name, l, &sym, \
- l->l_scope, R_MIPS_REL32); \
+ l->l_scope, R_MIPS_REL32, 0); \
} \
\
/* Currently value contains the base load address of the object \
@@ -495,14 +495,14 @@ elf_machine_got_rel (struct link_map *map, int lazy)
value = _dl_lookup_versioned_symbol(strtab + sym->st_name,\
map, \
&ref, scope, version, \
- R_MIPS_REL32); \
+ R_MIPS_REL32, 0); \
break; \
} \
/* Fall through. */ \
} \
case 0: \
value = _dl_lookup_symbol (strtab + sym->st_name, map, &ref, \
- scope, R_MIPS_REL32); \
+ scope, R_MIPS_REL32, 0); \
} \
\
(ref)? value + ref->st_value: 0; \
diff --git a/sysdeps/unix/sysv/linux/mips/fcntl.c b/sysdeps/unix/sysv/linux/mips/fcntl.c
new file mode 100644
index 0000000..ea951bc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/fcntl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list
index 1dfd983..c182f6c 100644
--- a/sysdeps/unix/sysv/linux/mips/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/syscalls.list
@@ -50,6 +50,7 @@ rt_sigqueueinfo - rt_sigqueueinfo i:iip __syscall_rt_sigqueueinfo
rt_sigsuspend - rt_sigsuspend i:pi __syscall_rt_sigsuspend
rt_sigtimedwait - rt_sigtimedwait i:pppi __syscall_rt_sigtimedwait
s_execve execve execve i:spp __syscall_execve
+s_fcntl - fcntl i:iiF __syscall_fcntl
s_fstat64 fxstat64 fstat64 i:ip __syscall_fstat64
s_ftruncate64 ftruncate64 ftruncate64 i:iiii __syscall_ftruncate64
s_getcwd getcwd getcwd i:pi __syscall_getcwd