avr: errno does not link: __errno_location is not in the C library

Đang mở Phù hợp với người mới
#206 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
embedded-iot

Hướng nghiên cứu

Bắt đầu với phần triển khai errno cho AVR và kiểm tra tính phù hợp trong tests/conformance/test_smoke.c; xác nhận cách các port khác cung cấp __errno_location và cách AVR xử lý errno giữa các luồng. Thêm phần triển khai cho AVR để chương trình được báo cáo liên kết được và vượt qua kiểm tra errno, sau đó chạy bài kiểm tra tính phù hợp cho mục tiêu Uno.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

An AVR program that uses errno does not link: <errno.h> defines errno as (*__errno_location()) for every target but Darwin, and the AVR C library does not define __errno_location. EmbCC 0.1.0 (macOS aarch64 release).

#include <errno.h>
#include <stdlib.h>
int main(void) { errno = 0; long v = strtol("99999999999999999999", 0, 10); return (errno == ERANGE && v != 0) ? 0 : 1; }
$ embcc --target=avr -mmcu=atmega328p -Os errno.c -o errno.elf
embld: undefined symbol '__errno_location' (referenced by errno-avr.elf.embcc-tmp.o)

Where EmbLinkRTOS meets it: tests/conformance/test_smoke.c checks errno after an out-of-range strtol, as the C library does it on every port; on the Uno it is the one image that fails to link for this reason.

A single static int and an __errno_location returning its address would do for AVR, which has no threads of its own; the RTOS's tests state that errno is not per thread there.

Part of #184 (AVR).

Ngôn ngữ chính
C
Star
1
Fork
2
Merge trung bình
20 giờ 55 phút
Pull request đã merge (30 ngày)
73

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của EmbLinkOs/EmbCC

Tất cả issue của EmbLinkOs/EmbCC

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.