-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Alan Modra
authored and
Ulrich Drepper
committed
Oct 30, 2009
1 parent
51a71cf
commit 31c759b
Showing
13 changed files
with
116 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,8 +7,6 @@ | |
|
||
#include <stdlib.h> | ||
|
||
int global = -1; | ||
|
||
int ret_foo; | ||
int ret_foo_hidden; | ||
int ret_foo_protected; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,8 +7,6 @@ | |
|
||
#include <stdlib.h> | ||
|
||
int global = -1; | ||
|
||
int ret_foo; | ||
int ret_foo_hidden; | ||
int ret_foo_protected; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,8 +3,6 @@ | |
|
||
#include <stdlib.h> | ||
|
||
int global = -1; | ||
|
||
extern int foo1 (void); | ||
|
||
int | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,8 +2,6 @@ | |
|
||
#include <stdlib.h> | ||
|
||
int global = -1; | ||
|
||
extern int foo (void); | ||
extern int foo_protected (void); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,4 +5,3 @@ | |
int ret_foo; | ||
int ret_foo_hidden; | ||
int ret_foo_protected; | ||
int global = -1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/* Used by the elf ifunc tests. */ | ||
#ifndef ELF_IFUNC_SEL_H | ||
#define ELF_IFUNC_SEL_H 1 | ||
|
||
extern int global; | ||
|
||
static inline void * | ||
ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void)) | ||
{ | ||
switch (global) | ||
{ | ||
case 1: | ||
return f1; | ||
case -1: | ||
return f2; | ||
default: | ||
return f3; | ||
} | ||
} | ||
|
||
static inline void * | ||
ifunc_one (int (*f1) (void)) | ||
{ | ||
return f1; | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* Used by the elf ifunc tests. */ | ||
#ifndef ELF_IFUNC_SEL_H | ||
#define ELF_IFUNC_SEL_H 1 | ||
|
||
extern int global; | ||
|
||
static inline void * | ||
ifunc_sel (int (*f1) (void), int (*f2) (void), int (*f3) (void)) | ||
{ | ||
register void *ret __asm__ ("r3"); | ||
__asm__ ("mflr 12\n\t" | ||
"bcl 20,31,1f\n" | ||
"1:\tmflr 11\n\t" | ||
"mtlr 12\n\t" | ||
"addis 12,11,global-1b@ha\n\t" | ||
"lwz 12,global-1b@l(12)\n\t" | ||
"addis %0,11,%2-1b@ha\n\t" | ||
"addi %0,%0,%2-1b@l\n\t" | ||
"cmpwi 12,1\n\t" | ||
"beqlr\n\t" | ||
"addis %0,11,%3-1b@ha\n\t" | ||
"addi %0,%0,%3-1b@l\n\t" | ||
"cmpwi 12,-1\n\t" | ||
"beqlr\n\t" | ||
"addis %0,11,%4-1b@ha\n\t" | ||
"addi %0,%0,%4-1b@l" | ||
: "=r" (ret) | ||
: "X" (&global), "X" (f1), "X" (f2), "X" (f3)); | ||
return ret; | ||
} | ||
|
||
static inline void * | ||
ifunc_one (int (*f1) (void)) | ||
{ | ||
register void *ret __asm__ ("r3"); | ||
__asm__ ("mflr 12\n\t" | ||
"bcl 20,31,1f\n" | ||
"1:\tmflr %0\n\t" | ||
"mtlr 12\n\t" | ||
"addis %0,%0,%1-1b@ha\n\t" | ||
"addi %0,%0,%1-1b@l" | ||
: "=r" (ret) | ||
: "X" (f1)); | ||
return ret; | ||
} | ||
#endif |