[09.02.17] ARM 컴파일러에서 L6248E 에러

L6248E: <objname>(<secname>) in <attr1> region '<r1>' cannot have <rtype> relocation
to <symname> in <attr2> region '<r2>'.

Example:
L6248E: foo.o(areaname) in ABSOLUTE region 'ER_RO' cannot have address/offset
type relocation to symbol in PI region 'ER_ZI'.

Applies to: ARM Developer Suite (ADS), RealView Developer Kit (RVDK) for OKI, RealView Developer Kit for XScale (RVXDK), RealView Developer Suite (RVDS) 2.0, RealView Developer Suite (RVDS) 2.1, RealView Developer Suite (RVDS) 2.2, RealView Development Suite (RVDS) 3.0, RealView Development Suite (RVDS) 3.1


링커는 "position independent" 코드를 시도할 때 에러를 발생할 수 있다. 다음 예제를 살펴보자


#include <stdio.h>
char *str = "test";
int main(void)
{
printf ("%s",str);
}

이 코드가 다음 링크 명령어와 컴파일 되게 되면:

armcc -c -apcs /ropi pi.c
armlink -ropi pi.o

링커는 다음과 같은 메시지를 보여준다.

Error: L6248E: pi.o(.data) in ABSOLUTE region 'ER_RW' cannot have address/offset type
relocation to .constdata in PI region 'ER_RO'.

위에 코드를 보면, 컴파일러는 global pointer str을 char string  test를 가진 놈으로 생성한다. global pointer str은 .constdata 영역에서 char string "test"의 주소를 초기화해야 한다. 하지만, 절대 주소들은 PI 시스템에서 사용될 수 없으며, 그래서 링크 단계가 실패한다. (position independent).constdata의 ABS32 relocation 때문이다.


이를 해결하기 위해서는, 명시적인 포인터를 피하도록 코드를 재작성해야 한다. 두가지 가능한 방법을 살펴본다:

1) global pointer 대신 global array를 사용한다.

#include <stdio.h>
const char str[] = "test";
int main(void)
{
printf ("%s",str);
}

2) global pointer 대신 local pointer를 사용한다.

#include <stdio.h>
int main(void)
{
char *str = "test";
printf ("%s",str);
}

여러 개의 element들을 가진 list를 사용한다면 다음을 숙지하자:

char * list[] = {"zero", "one", "two"};

배열에서 각 element를 위한 link error를 분리할 수도 있다. 이 경우에 추천되는 해결책은 다음과 같다.:

char list[3][5] = {"zero", "one", "two"};

프린트를 할 때는 다음과 같이 한다(예시):

printf("%s", list[1]);

리스트를 위한 이차원 배열을 선언해야 할 때 배열의 수로서 첫번째 dimension을 채우고, 두번째 dimension은 max 사이즈로 한다.


출처 :

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/kiFMhMixi3EjI7.html



by 일단이거 | 2009/02/17 11:39 | - 프로개발자를 향하여 | 트랙백 | 덧글(0)

[습작] Driving in the night!

Driving_in_the_night.mp3 

1. 작업일     : 2008년 8월 17일
 

2. 작업 시간 : 5시간 정도 

3. 장비       

오됴카드       : Toneport ux2

마스터키보드 : CME UF60

VST        : Stylus RMX, Nexus, Hypersonic 2

4. 작업 내용

머..영 아는게 없으니..소리만 계속 덧칠한다..

확실히 코드를 단조롭게 3개만 쓰고..(Em Dm C 아..G도)

멜로디를 복잡하지 않게 가서..

심심한 느낌이 없잖아 있다..

지금 들어보니..솔직히 좀 구리다-.-;;;

머 근데..오늘은 더이상 시간이 없고..

걍..습작이니 귀찮기도 하고-.-;;; 그냥 올려놓는다..

수정되면 또 파일 올리지 머...

역시 귀에 쏙쏙 들어오는 노래는 안된다..독창성이 있어야 해..

 

별로 유쾌하지만은 않은 일들이 무지 많았던 요번 주말에..

만약에 차를 타고 나간다면 어떤 느낌의 노래를 듣고 싶을까..해서

평소에 밤에 달릴때 듣기 좋아하는

리버브 이빠이 들어간 냥냥한 사운드로 만땅 채웠다..

 

멜로디가 너무 단조로워서 한번 테마가 끝날때마다..

악기를 하나 덧입히는 방법을 사용했다.

확실히 기존 대중음악에서 감정을 고조시키는 방법을

실제로 적용해보니..그럭저럭..먹히는 듯

 

그나저나 넥서스 이거 물건이다..확장팩없이 사용하는데도..

내가 원하는 소리가 다 들어있다..

이번 작업에는 하이퍼 소닉은 효과음정도만..ㅋㅋ

 

그래도 처음에 차 시동 거는 소리로 시작해서

마지막에 자동차 지나가는 소리로 마무리까지

일관성을 유지하려고 나름 노력했다..

특히 처음 도입부에서 적용한 챱챱이는

나중에라도 빅뱅 스탈의 노래 만들면 꼭 써먹어야 겠다..

이번엔 이 챱챱이와 넥서스를 공부한 것이 큰 수확!!!!

좀만 더 수정하면 멋진 비트가 될듯..

 

빅뱅 스탈의 건반 프레이즈를 만들라고 했는데..

확실히 아직은 역부족인듯..좀 더 구상해봐야 겠다..

기타 사운드를 넣으려다가..

손이 굳었는지..하이 코드를 워낙 못잡아서 때려쳤다..

이씨..기타 연습도 꾸준히 해야지...

 

짧은 곡이나마 나름 만들어보니까

노래 만드는 게 얼마나 힘든건지 알겠다..

정확하게 설계하고 그 느낌을 잃지않고 계속 유지하려면

상당한 실력과 집중력을 필요로 할 것 같다.

다음번에는 가사 있는 노래를 만들어 봐야징..

언제가 될지는 모르겠지만 계속 하다보면 언젠간 되겠지

 

어쨋든..미디 첫 습작인데다가..

코드 따윈 제대로 알지로 못하는 내겐 그럭저럭 만족할만한 사운드

가 나온게 아닐까 생각한다. ㅋㅋㅋ

 

by 일단이거 | 2008/08/18 12:13 | - 음악 놀이~! | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶